package cn.lyvust.shili01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import java.sql.ResultSet;
import java.sql.Statement;
/**
 * Description:
 * date: 2021-5-25 19:02
 *
 * @author Guo_guo
 * @since JDK 1.8
 */

public class TestDb {
    public static void main(String[] args) {
        Connection conn = null;
        // MySQL的JDBC连接语句
        // URL编写格式：jdbc:mysql://主机名称：连接端口/数据库的名称?参数=值
        String url = "jdbc:mysql://localhost:3306/student?user=root&password=123456";
        try {
            Class.forName("com.mysql.jdbc.Driver"); // 加载驱动
            conn = DriverManager.getConnection(url); // 获取数据库连接
            try {
                createTable(conn); // 建表
            } catch (Exception e) {
                System.out.println("建表异常！" + e);
            }
            insert(conn); // 插入一条数据
            insert(conn); // 插入一条数据
            update(conn); // 更新数据
            query(conn); // 查询数据
            delete(conn); // 删除数据
            query(conn); // 查询数据
            conn.close(); // 关闭数据库连接
        } catch (Exception e) {
            System.out.println("代码或数据库异常" + e);
        }
    }

    /**
     * 建表
     *
     * @param conn 数据库连接对象
     * @throws SQLException 异常统一抛出到main方法中处理
     */
    private static void createTable(Connection conn) throws SQLException {
        // 建表SQL语句
        String sql = "CREATE TABLE stuinfo(id CHAR(12),name CHAR(20),age INT);";
        // 使用Statement来执行SQL语句
        Statement state = conn.createStatement();
        // 执行操作
        state.execute(sql);
        // 关闭Statement
        state.close();
    }

    /**
     * 插入一条数据
     *
     * @param conn 数据库连接对象
     * @throws SQLException 异常统一抛出到main方法中处理
     */
    private static void insert(Connection conn) throws SQLException {
        // 插入数据SQL语句
        String sql = "INSERT INTO stuinfo VALUES('201307020010','lisi',22);";
        // 使用Statement来执行SQL语句
        Statement state = conn.createStatement();
        // 执行数据更新操作
        int result = state.executeUpdate(sql);
        // 显示结果
        System.out.println("成功插入" + result + "条数据！");
        // 关闭Statement
        state.close();
    }

    /**
     * 删除数据
     *
     * @param conn 数据库连接对象
     * @throws SQLException 异常统一抛出到main方法中处理
     */
    private static void delete(Connection conn) throws SQLException {
        // 插入数据SQL语句，使用?表示占位符
        String sql = "DELETE FROM stuinfo WHERE id=?;";
        // 使用PreparedStatement来预加载SQL语句
        PreparedStatement ps = conn.prepareStatement(sql);
        // 参数一：预加载的SQL语句中?的序号
        // 参数二：?的数据
        ps.setString(1, "201307020010");
        // 执行更新操作
        int result = ps.executeUpdate();
        // 显示结果
        System.out.println("成功删除" + result + "条数据！");
        // 关闭Statement
        ps.close();
    }

    /**
     * 更改数据
     *
     * @param conn 数据库连接对象
     * @throws SQLException 异常统一抛出到main方法中处理
     */
    private static void update(Connection conn) throws SQLException {
        // 插入数据SQL语句，使用?表示占位符
        String sql = "UPDATE stuinfo SET name=?,age=? WHERE id=?;";
        // 使用PreparedStatement来预加载SQL语句
        PreparedStatement ps = conn.prepareStatement(sql);
        // 参数一：预加载的SQL语句中?的序号
        // 参数二：?的数据
        ps.setString(1, "Jason");
        ps.setInt(2, 27);
        ps.setString(3, "201307020010");
        // 执行更新操作
        int result = ps.executeUpdate();
        // 显示结果
        System.out.println("成功更改" + result + "条数据！");
        // 关闭Statement
        ps.close();
    }

    /**
     * 查询数据
     *
     * @param conn 数据库连接对象
     * @throws SQLException 异常统一抛出到main方法中处理
     */
    private static void query(Connection conn) throws SQLException {
        // 查询语句
        String sql = "SELECT * FROM stuinfo;";
        // 使用Statement来执行SQL语句
        Statement state = conn.createStatement();
        // 执行查询操作
        ResultSet rs = state.executeQuery(sql);
        // 遍历结果
        while (rs.next()) {
            // 通过字段名称获得字段值
            String id = rs.getString("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            // 打印一条结果
            System.out.println(id + "-" + name + "-" + age);
        }
        // 关闭ResultSet
        rs.close();
        // 关闭Statement
        state.close();
    }
}

